package com.whvronk.server.codec;

import com.whvronk.server.operation.ResponseMessage;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToMessageEncoder;

import java.util.List;

/**
 * 第一次编码
 * 主要是将ResponseMessage消息对象编码为ByteBuf用于网络传输
 */
public class DataProtocolEncoder extends MessageToMessageEncoder<ResponseMessage> {

    /*
        1.重新分配一个ByteBuf的缓冲区
        2.调用ResponseMessage中的encode方法将responseMessage对象编码为字节数据然后写入到buffer中
        3.将编码后的ByteBuf添加到out列表中，供下一个ChannelHandler处理
     */
    @Override
    protected void encode(ChannelHandlerContext channelHandlerContext, ResponseMessage responseMessage, List<Object> list) throws Exception {
        ByteBuf buffer = channelHandlerContext.alloc().buffer();
        responseMessage.encode(buffer);
        list.add(buffer);
    }
}
